<?php
define('_DIRECTORY', '../var/res');
$base = '/' . trim(dirname($_SERVER['PHP_SELF']), '/');
$uri = '/' . trim($_SERVER['REQUEST_URI'], '/');
preg_match("#^$base(.*)$#is", $uri, $request);
$pi = pathinfo(trim($request[1], '/'));
if(preg_match('/^[a-f0-9]{32}$/is', $pi['filename'])) {
	$pi['dirname'] = $pi['filename'];
	$pi['basename'] = 'large.jpg';
	$pi['extension'] = 'jpg';
}
if(preg_match('/^[a-f0-9]{16}$/is', $pi['filename'])) {
	$pi['dirname'] = $pi['dirname'] . '/' . $pi['basename'];
	$pi['basename'] = 'large.jpg';
	$pi['extension'] = 'jpg';
}

$dirname = '/' . $pi['dirname'];
$secure = false;
if(preg_match('/^[a-f0-9]{32}$/is', $pi['dirname'])) {
	$dirname = md5Path($pi['dirname']);
	$secure = true; // 安全链接
}
if(!isset($pi['extension'])) {
	$pi['extension'] = 'jpg';
	$pi['basename'] .= '.jpg';
}
$filename = _DIRECTORY . $dirname . '/' . $pi['basename'];

if(!file_exists($filename)) {
	notFound();
}
$mime = getMime($pi['extension']);
$data = file_get_contents($filename);
header("Content-type: $mime");
echo $data;

function getMime($type) {
	$mime = array(
		'text/html' => 'html htm shtml', 'text/css' => 'css', 'text/xml' => 'xml', 'image/gif' => 'gif', 
		'image/jpeg' => 'jpeg jpg', 'application/x-javascript' => 'js', 'application/atom+xml' => 'atom', 
		'application/rss+xml' => 'rss', 
		'text/mathml' => 'mml', 'text/plain' => 'txt', 'text/vnd.sun.j2me.app-descriptor' => 'jad', 
		'text/vnd.wap.wml' => 'wml', 'text/x-component' => 'htc', 
		'image/png' => 'png', 'image/tiff' => 'tif tiff', 'image/vnd.wap.wbmp' => 'wbmp', 'image/x-icon' => 'ico', 
		'image/x-jng' => 'jng', 'image/x-ms-bmp' => 'bmp', 'image/svg+xml' => 'svg', 
		'application/java-archive' => 'jar war ear', 'application/mac-binhex40' => 'hqx', 
		'application/msword' => 'doc', 'application/pdf' => 'pdf', 'application/postscript' => 'ps eps ai', 
		'application/rtf' => 'rtf', 'application/vnd.ms-excel' => 'xls', 'application/vnd.ms-powerpoint' => 'ppt', 
		'application/vnd.wap.wmlc' => 'wmlc', 'application/vnd.wap.xhtml+xml' => 'xhtml', 
		'application/vnd.google-earth.kml+xml' => 'kml', 'application/vnd.google-earth.kmz' => 'kmz', 
		'application/x-cocoa' => 'cco', 'application/x-java-archive-diff' => 'jardiff', 
		'application/x-java-jnlp-file' => 'jnlp', 'application/x-makeself' => 'run',
		'application/x-perl' => 'pl pm', 'application/x-pilot' => 'prc pdb', 
		'application/x-rar-compressed' => 'rar', 'application/x-redhat-package-manager' => 'rpm', 
		'application/x-sea' => 'sea', 'application/x-shockwave-flash' => 'swf', 
		'application/x-stuffit' => 'sit', 'application/x-tcl' => 'tcl tk', 
		'application/x-x509-ca-cert' => 'der pem crt', 'application/x-xpinstall' => 'xpi', 'application/zip' => 'zip', 
		'application/octet-stream' => 'bin exe dll', 'application/octet-stream' => 'deb', 
		'application/octet-stream' => 'dmg', 'application/octet-stream' => 'eot', 'application/octet-stream' => 'iso img', 
		'application/octet-stream' => 'msi msp msm', 
		'audio/midi' => 'mid midi kar', 'audio/mpeg' => 'mp3', 'audio/x-realaudio' => 'ra', 
		'video/3gpp' => '3gpp 3gp', 'video/mpeg' => 'mpeg mpg', 'video/quicktime' => 'mov', 'video/x-flv' => 'flv', 
		'video/x-mng' => 'mng', 'video/x-ms-asf' => 'asx asf', 'video/x-ms-wmv' => 'wmv', 'video/x-msvideo' => 'avi'
	);
	
	foreach($mime as $k => $v) {
		$ext = explode(' ', $v);
		foreach($ext as $vv) {
			if($type == trim($vv)) {
				return trim($k);
			}
		}
	}
	return 'application/octet-stream';
}

function md5Path($code) {
	$a = substr($code, 1, 1);
	$b = substr($code, -2, 2);
	$c = substr($code, 8, 16);
	return "/$a/$b/$c";
}

function notFound() {
	header("HTTP/1.0 404 Not Found");
	exit;
}
